/*
 * @Description: In User Settings Edit
 * @Author: your name
 * @Date: 2019-08-28 09:28:55
 * @LastEditTime: 2019-08-29 11:59:45
 * @LastEditors: Please set LastEditors
 */
/*
 * @lc app=leetcode.cn id=20 lang=javascript
 *
 * [20] 有效的括号
 *
 * https://leetcode-cn.com/problems/valid-parentheses/description/
 *
 * algorithms
 * Easy (39.34%)
 * Likes:    1007
 * Dislikes: 0
 * Total Accepted:    112.8K
 * Total Submissions: 286.3K
 * Testcase Example:  '"()"'
 *
 * 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串，判断字符串是否有效。
 * 
 * 有效字符串需满足：
 * 
 * 
 * 左括号必须用相同类型的右括号闭合。
 * 左括号必须以正确的顺序闭合。
 * 
 * 
 * 注意空字符串可被认为是有效字符串。
 * 
 * 示例 1:
 * 
 * 输入: "()"
 * 输出: true
 * 
 * 
 * 示例 2:
 * 
 * 输入: "()[]{}"
 * 输出: true
 * 
 * 
 * 示例 3:
 * 
 * 输入: "(]"
 * 输出: false
 * 
 * 
 * 示例 4:
 * 
 * 输入: "([)]"
 * 输出: false
 * 
 * 
 * 示例 5:
 * 
 * 输入: "{[]}"
 * 输出: true
 * 
 */
/**
 * @param {string} s
 * @return {boole an}
 */
var isValid = function(s) {
    const len = s.length
    if(len % 2) return false
    const obj = {
        "(":")",
        "{":"}",
        "[":"]"
    }
    let left = []
    const rule = /\{|\(|\[/
    for(let i=0;i<len;i++){
        if(rule.test(s[i])){
            left.push(s[i])
        }else{
            const right = left.pop()
            if(obj[right] !== s[i]){
                return false
            }
        }
    }
    if(left.length){
        return false
    }else{
        return true
    }
};

